package com.xk._01基础篇._13优先级队列PriorityQueue.queqe;

import com.xk._01基础篇._12堆.heap.BinaryHeap;
import com.xk._01基础篇._12堆.heap.Heap;

import java.util.Comparator;

/**
 * @description:
 * @author: xu
 * @date: 2022/9/29 20:41
 */
public class PriorityQueue<E> {
    private Heap<E> heap;

    public PriorityQueue(){ this(null); }
    public PriorityQueue(Comparator<E> comparator) {
        this.heap = new BinaryHeap<>(comparator);
    }

    /**
     * 元素的数量
     */
    public int size() {
        return heap.size();
    }

    /**
     * 判空
     */
    public boolean isEmpty() {
        return heap.isEmpty();
    }

    /**
     * 清空
     */
    public void clear() {
        heap.clear();
    }

    /**
     * 入队 尾部添加元素
     */
    public void enQueue(E element) {
        heap.add(element);
    }

    /**
     * 出队 头部删除元素
     */
    public E deQueue() {
        return heap.remove();
    }

    /**
     * 获取队头元素
     */
    public E front() {
        return heap.get();
    }
}
